<!DOCTYPE html><html><head><title>GIT工作原理及操作</title><meta charset='utf-8'><link href='https://dn-maxiang.qbox.me/res-min/themes/marxico.css' rel='stylesheet'><style>
.note-content  {font-family: 'Helvetica Neue', Arial, 'Hiragino Sans GB', STHeiti, 'Microsoft YaHei', 'WenQuanYi Micro Hei', SimSun, Song, sans-serif;}

</style></head><body><div id='preview-contents' class='note-content'>
                        
                    

<h3 id="git工作原理及操作">GIT工作原理及操作</h3>

<p></p>

<p>当我们在本地创建一个git仓库后，我们可以基于这个仓库管理我们的代码</p>

<p><strong><code>git的工作流程</code></strong></p>

<blockquote>
  <p>每一个git仓库都划分为三个区域</p>
  
  <ul><li>工作区：编辑代码的地方</li>
  <li>暂存区：临时存储要生成版本代码的地方</li>
  <li>历史区：存储的是生成的每一个版本代码</li>
  </ul>
</blockquote>

<p><img longdesc="./1523412523484.png" alt="Alt text" title="" type="image/png" src="" class=""></p>

<p><strong><code>工作区提交到暂存区</code></strong></p>

<blockquote>
  <p>$ git status <br>
  查看代码或者文件的状态（当前处于哪个区域）:  红色（当前处于工作区，还没有提交到暂存区）绿色（当前处于暂存区，还没有提交到历史区）如果没有文件，代表三个区域代码已经同步，历史版本也在历史区生成了</p>
</blockquote>

<p><code>$ git add . / $ git add -A</code> <br>
把当前工作区中所有最新修改的文件，都提交到暂存区</p>

<p><strong><code>暂存区到历史区</code></strong> <br>
<code>$ git commit</code></p>

<blockquote>
  <p>这样执行后，会弹出一个提交文本输入界面，需要我们编写本次提交到历史区，给当前版本编写的备注信息</p>
  
  <p>先按 i 进入编辑插入模式 <br>
  输入备注信息 <br>
  按ESC <br>
  输入“ :wq ” 保存并退出</p>
</blockquote>

<p><code>$ git commit -m'自己需要编写的备注信息'</code></p>

<p><code>$ git log</code> <br>
查看当前历史区提交的记录（查看版本信息）</p>

<p><code>$ git diff</code> <br>
工作区 VS 暂存区</p>

<p><code>$ git diff master</code> <br>
工作区 VS 历史区（master分支）</p>

<p><code>$ git diff --cached</code> <br>
暂存区 VS 历史区</p>

<h3 id="git和github同步">git和gitHub同步</h3>

<ol start="1"><li rel="1">让本地的git仓库和远程仓库建立关联</li>
</ol>

<p><code>$ git remote -v</code> <br>
查看所有的关联信息</p>

<p><code>$ git remote add xxx [远程仓库git地址]</code> <br>
建立关联</p>

<p><code>$ git remote remove xxx</code> <br>
移除关联</p>

<p>我们远程仓库关联在一起的名字默认是：origin，当然自己可以随意修改</p>

<ol start="2"><li rel="2">把本地的信息推送到远程仓库上，或者从远程仓库上拉取最新的信息到本地仓库</li>
</ol>

<blockquote>
  <p>我们本地推送和拉取的信息，既有代码也有版本信息，所以说与其说是推送和拉取，不如说是和远程仓库保持信息的同步</p>
</blockquote>

<p>在推送之前，我们都应该先拉取 <br>
<code>$ git pull origin（这个名字就是和远程仓库关联的这个名字，以自己设置的为主） master</code> <br>
从远程仓库的master分支拉取最新的信息</p>

<p><code>$ git push origin master</code> <br>
把自己本地信息推送到远程仓库的master分支下</p>

<hr>

<p>以上是操作知识点，真实项目开发流程</p>

<ol><li rel="1">LEADER会首先创建一个远程仓库（这个仓库可能是空的，也可能是包含了项目需要的基础的结构信息）</li>
<li rel="2">作为开发者，我们需要在本地创建一个本地仓库，还需要让当前本地的仓库和远程仓库保持关联</li>
</ol>

<blockquote>
  <p>原始做法： <br>
  git init  <br>
  git remote add origin [GIT仓库地址]</p>
  
  <p>简单做法： <br>
  git clone [远程仓库地址] [克隆后的名字：可以不设置，默认是仓库名]</p>
</blockquote>

<ol start="3"><li rel="3"><p>在本地开发产品，需要同步的时候，我们首先把工作区内容在本地仓库中放到历史区，生成版本信息（git add . / git commit -m”），在把本地历史区的信息推送到远程仓库上（git pull / git push）</p></li>
<li rel="4"><p>在团队协作开发的时候，LEADER会在自己的gitHub账号下创建一个远程仓库，那么团队其他成员在向这个远程仓库推送信息的时候，使用自己的账号是没有推送权限的，我们需要把当前这个远程仓库，在github中创建工作群组，让更多人用自己的账号也有操作权限</p></li>
</ol>



<p><img longdesc="./1523420219303.png" alt="Alt text" title="" type="image/png" src="" class=""> <br>
小组成员在自己的邮箱中收到一封邀请邮件，需要确认同意</p>



<p><img longdesc="./1523420292109.png" alt="Alt text" title="" type="image/png" src="" class=""> <br>
这样就是加入成功了</p>

<p><img longdesc="./1523420338083.png" alt="Alt text" title="" type="image/png" src="" class=""></p></div></body></html>